from datetime import datetime
from typing import List, Dict, Any

from langchain_core.tools import tool

# 导入通用工具管理器
from tools.ToolManager import ToolManager, SingleToolConfig


@tool
def get_current_time(format: str = "full") -> str:
    """
    查询当前时间或日期。

    参数:
        format: 可选，返回格式。可选值：
            - "full": 返回完整日期时间（如 2025-05-20 22:00:00）
            - "date": 仅返回日期（如 2025-05-20）
            - "time": 仅返回时间（如 22:00:00）
    返回:
        当前时间字符串。
    """
    now = datetime.now()
    if format == "date":
        return now.strftime("%Y-%m-%d")
    elif format == "time":
        return now.strftime("%H:%M:%S")
    else:
        return now.strftime("%Y-%m-%d %H:%M:%S")


class CurrentTimeToolManager(ToolManager):
    """当前时间工具管理器"""

    @property
    def category_name(self) -> str:
        return "获取当前时间的工具"

    @property
    def category_code(self) -> str:
        return "current_time"

    @property
    def category_description(self) -> str:
        return "提供时间相关功能的工具集，包括获取当前时间、日期等功能"

    def get_tool_configs(self) -> List[Dict[str, Any]]:
        time_tool = SingleToolConfig(
            tool_id=1,
            tool_name="get_current_time",
            description="查询当前时间或日期的工具",
            is_enabled=True
        )

        time_tool.add_parameter(
            param_name="format",
            param_type="string",
            description="返回格式：full(完整日期时间)、date(仅日期)、time(仅时间)",
            default_value="full",
            is_required=False
        )

        return [time_tool.to_dict()]

    def get_langchain_tool(self):
        return get_current_time


# 创建全局实例
current_time_tool_manager = CurrentTimeToolManager()
